package com.deco.logic.product;

import java.util.Date;
import java.util.List;

import com.deco.dao.delegate.product.*;
import com.deco.domain.vo.product.*;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Component;

import com.free.common.vo.PageResponseVo;
import com.free.common.vo.PageSearchVo;
import org.springframework.transaction.annotation.Transactional;

/**
 * <p>
 * 功能概述:
 * </p>
 * <p>
 * 功能详述:
 * </p>
 */
@Component
public class PartsInfoLogic {
    /*========================================================================*
     *                         Public Fields (公共属性)
     *========================================================================*/

    /*========================================================================*
     *                         Private Fields (私有属性)
     *========================================================================*/
    
    @Autowired
    IPartsInfoDao partsInfoDao;

    @Autowired
    IPartsInfoImageDao partsImgDao;

	@Autowired
    IPartsInfoVedioDao partsVedioDao;
    /*========================================================================*
     *                         Construct Methods (构造方法)
     *========================================================================*/

    /*========================================================================*
     *                         Public Methods (公有方法)
     *========================================================================*/

	public PartsInfoVo getPartsInfo(int id) {
		PartsInfoVo partsInfoVo = new PartsInfoVo();
		partsInfoVo.setId(id);
        partsInfoVo =partsInfoDao.selectOne(partsInfoVo);
		PartsInfoImageVo imgVo = new PartsInfoImageVo();
		imgVo.setPartsInfoId(id);
		List<PartsInfoImageVo> imgs = partsImgDao.selectList(imgVo,"id asc");
		partsInfoVo.setImageList(imgs);
		PartsInfoVedioVo vedioVo = new PartsInfoVedioVo();
		vedioVo.setPartsInfoId(id);
		List<PartsInfoVedioVo> videos = partsVedioDao.selectList(vedioVo, "id asc");
		partsInfoVo.setVedioList(videos);
		return partsInfoVo;
	}

	@Transactional
	@CacheEvict(value="partsInfoCache",allEntries = true)
	public void create(PartsInfoVo partsInfoVo) {
        partsInfoVo = partsInfoDao.add(partsInfoVo);
        int partsInfoId = partsInfoVo.getId();
        Date dt  = partsInfoVo.getCreateTime();
        int creator = partsInfoVo.getCreateBy();

		if(partsInfoVo.getImageList() != null && partsInfoVo.getImageList().size()>0){
		    partsInfoVo.getImageList().forEach(x->{
		        x.setPartsInfoId(partsInfoId);
                x.setCreateTime(dt);
                x.setCreateBy(creator);
                x.setUpdateTime(dt);
                x.setUpdateBy(creator);
            });

			partsImgDao.batchAdd(partsInfoVo.getImageList());
		}
		if(partsInfoVo.getVedioList() != null && partsInfoVo.getVedioList().size()>0){
            partsInfoVo.getVedioList().forEach(x->{
                x.setPartsInfoId(partsInfoId);
                x.setCreateTime(dt);
                x.setCreateBy(creator);
                x.setUpdateTime(dt);
                x.setUpdateBy(creator);
            });
			partsVedioDao.batchAdd(partsInfoVo.getVedioList());
		}

	}

	@Transactional
	@CacheEvict(value="partsInfoCache",allEntries = true)
	public void update(PartsInfoVo partsInfoVo) {
		PartsInfoImageVo imgVo = new PartsInfoImageVo();
		imgVo.setPartsInfoId(partsInfoVo.getId());
		partsImgDao.deleteByCondition(imgVo);
        PartsInfoVedioVo vedioVo = new PartsInfoVedioVo();
        vedioVo.setPartsInfoId(partsInfoVo.getId());
        partsVedioDao.deleteByCondition(vedioVo);
        Date dt  = partsInfoVo.getCreateTime();
        int creator = partsInfoVo.getUpdateBy();

		if(partsInfoVo.getImageList() != null && partsInfoVo.getImageList().size()>0){
            partsInfoVo.getImageList().forEach(x->{
                x.setUpdateTime(dt);
                x.setUpdateBy(creator);
            });
			partsImgDao.batchAdd(partsInfoVo.getImageList());
		}
		if(partsInfoVo.getVedioList() != null && partsInfoVo.getVedioList().size()>0){
            partsInfoVo.getVedioList().forEach(x->{
                x.setUpdateTime(dt);
                x.setUpdateBy(creator);
            });
			partsVedioDao.batchAdd(partsInfoVo.getVedioList());
		}
		partsInfoDao.update(partsInfoVo);
	}

	@CacheEvict(value="partsInfoCache",allEntries = true)
	public void delete(int id) {
        PartsInfoImageVo imgVo = new PartsInfoImageVo();
        imgVo.setPartsInfoId(id);
        partsImgDao.deleteByCondition(imgVo);
        PartsInfoVedioVo vedioVo = new PartsInfoVedioVo();
        vedioVo.setPartsInfoId(id);
        partsVedioDao.deleteByCondition(vedioVo);
	    partsInfoDao.delete(id);
	}

	@CacheEvict(value="partsInfoCache",allEntries = true)
	public int batchDelete(Integer[] ids) {
		partsImgDao.batchDelelteByPartsInfoId(ids);
		partsVedioDao.batchDeleteByPartsInfoId(ids);
		return partsInfoDao.batchDelete(ids);
	}

	public PageResponseVo<PartsInfoVo> getPageInfo(
			PageSearchVo<PartsInfoVo> condition) {
		return partsInfoDao.selectByPageNoNameLike(condition.getConditionVo(), " sort asc,id desc ", condition.getCurrentNo(), condition.getLength());
	}

	public List<PartsInfoVo> getAll() {
		return partsInfoDao.selectList(new PartsInfoVo(), "");
	}

	@Cacheable(value="partsInfoCache",key="#conditon")
	public List<PartsInfoVo> selectInfoListForFront(PartsInfoVo conditon){
		return partsInfoDao.selectInfoList(conditon);
	}

	@Cacheable(value="partsInfoCache",key = "#categoryId")
	public List<PartsInfoVo> partsInfoForMenus(int categoryId){
		PartsInfoVo vo = new PartsInfoVo();
		vo.setCategoryId(categoryId);
		return partsInfoDao.partsInfoForMenus(vo);
	}

	public Integer getMaxSort(){
		return partsInfoDao.getMaxSort();
	}

    /*========================================================================*
     *                         Private Methods (私有方法)
     *========================================================================*/
}
